home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / datapage.c < prev    next >
C/C++ Source or Header  |  1996-05-27  |  23KB  |  1,059 lines

  1. /*
  2.  * DataPage.c
  3.  *
  4.  * Purpose:
  5.  * -------- 
  6.  * DatPage = "Fichier" virtuel ds ramdisque virtuel!
  7.  *
  8.  * History:
  9.  * --------
  10.  * 1993: fplanque: Created
  11.  * 08.08.94: fplanque: removed set_datastate(): obsolete
  12.  * 09.08.94: removed update_datastate(): obsolete
  13.  */
  14.  
  15.  
  16.      #include "!OPTIONS.H"                /* Options de compilation */         
  17.     #define    THIS_FILE    "DATAPAGE.C v1.00 - 03.95"
  18.           
  19.  
  20. /*
  21.  * System headers:
  22.  */
  23.     #include    <stdio.h>                /* header standard */
  24.     #include    <stdlib.h>                /* header librairie de fnct std */
  25.     #include <string.h>                /* Strlen... */
  26.     #include    <ext.h>                    /* MAXPATH... */
  27.     #include <assert.h>   
  28.  
  29. /*
  30.  * Custom headers:
  31.  */
  32.     #include    "SPEC_PU.H"
  33.     #include "S_MALLOC.H"
  34.     #include    "DESK_PU.H"            /* Pour connaitre offset des icones de datas */
  35.     #include    "STUT_ONE.RSC\STUT_3.H"
  36.     #include "AESDEF.H"
  37.     #include    "DEBUG_PU.H"    
  38.     #include "DATPG_PU.H"
  39.     #include "DTDIR_PU.H"
  40.     #include "DATAGRPS.H"
  41.     #include "ARBPG_PU.H"
  42.     #include "ARPAR_PU.H"
  43.     #include "LISTS_PU.H"
  44.     #include "FILES_PU.H"
  45.     #include "OBJCT_PU.H"
  46.     #include "WIN_PU.H"    
  47.     #include "ATREE_PU.H"
  48.     #include    "ARBKEYPU.H"
  49.  
  50. /*
  51.  * ------------------------ PROTOTYPES -------------------------
  52.  */
  53.  
  54. /*
  55.  * EXTernal prototypes:
  56.  */
  57.     /* 
  58.      * Extended form_do: 
  59.      */
  60.     extern    int    ext_form_do( OBJECT *tree, int *startfield );
  61.     /* 
  62.      * G‚n‚ral: 
  63.      */
  64.     extern    void    no_selection( void );
  65.     extern    void erreur_rsrc( void );
  66.     /*
  67.      * dossiers:
  68.      */
  69.     extern    SSTATE dataDir_getSavState(        /* Out: Satut sauvegarde */
  70.                             DATADIR    *    pDataDir );    /* In:  Datadir concern‚ */
  71.     extern    void dataDir_setSavState(
  72.                             DATADIR *    pDataDir,            /* In: DATADIR concern‚ */
  73.                             SSTATE         sstate,                /* In: Etat */
  74.                             BOOL            b_GrafUpdate );    /* In: S'il faut faut r‚afficher les ic“ne correspondantes... */
  75.  
  76.    
  77. /*
  78.  * ------------------------ VARIABLES -------------------------
  79.  */
  80.  
  81.     
  82. /*
  83.  * External variables: 
  84.  */
  85.     /* 
  86.      * Ic“nes: 
  87.      */
  88.     extern    OBJECT        *G_desktop_adr;        /* Ptr sur arbre bureau */
  89.     extern    WIPARAMS        *G_desk_params_adr;    /* ParamŠtres de la "fenˆtre bureau" */
  90.     /* 
  91.      * Fenˆtres
  92.      */
  93.     extern    WIPARAMS        *G_wi_list_adr;    /* Adresse de l'arbre de paramŠtres */
  94.     /* 
  95.      * Fichiers: 
  96.      */
  97.     extern    char    G_filename[ 13 ];            /* Nom du fichier … charger ex:TEST.TXT */
  98.     extern    char    G_filepath[ MAXPATH ];    /* Chemin du fichier … charger ex:D\EXEMPLE */
  99.     /* 
  100.      * Desktop: 
  101.      */
  102.     extern    DATAGROUP    *    G_datagroups;        /* Pointeur sur tableau de G_datagroups */
  103.     extern    WIPARAMS        *    G_selection_adr;    /* S‚lection courante */
  104.  
  105. /*
  106.  * Private variables: 
  107.  */
  108.     static OBJECT    *M_pForm_Rename;            /* Ptr sur boite "renommer" */
  109.     static OBJECT    *M_edit_comment;            /* Boite d'‚dition du commentaire */
  110.     static void        init_vars_datagroup( DATAGROUP *datagroup );
  111.      
  112.  
  113. /*
  114.  * ------------------------ FUNCTIONS -------------------------
  115.  */
  116.  
  117. /*
  118.  * init_datas(-)
  119.  *
  120.  * Purpose:
  121.  * --------
  122.  * Initialise le pr‚sent module
  123.  *
  124.  * Notes:
  125.  * ------
  126.  * Procedure a appeller depuis le programme principal
  127.  *
  128.  * History:
  129.  * --------
  130.  * 1993: fplanque: Created
  131.  * 20.09.94: fplanque: Ajout‚ form RENAME; corrig‚ bug pour COMMENT
  132.  */
  133. void    init_datas( void )
  134. {
  135.     if (rsrc_gaddr( R_TREE, NAMES,    &M_pForm_Rename ) == 0)
  136.         erreur_rsrc();
  137.         rsrc_color( M_pForm_Rename );        /* Fixe couleurs */
  138.  
  139.     if (rsrc_gaddr( R_TREE, COMMENT,    &M_edit_comment ) == 0)
  140.         erreur_rsrc();
  141.         rsrc_color( M_edit_comment );        /* Fixe couleurs */
  142.  
  143. }
  144.                       
  145.  
  146.  
  147. /*
  148.  * create_stdDataBlock(-)
  149.  *
  150.  * Purpose:
  151.  * --------
  152.  * Cr‚e une nouveau datablock vide
  153.  *
  154.  * History:
  155.  * --------
  156.  * 19.06.94: Created base on create_std_datapage()
  157.  */
  158. DATABLOCK *    create_stdDataBlock( void )    /* Out: Nouveau Databloc */
  159. {
  160.     /* 
  161.      * Cr‚e une zone de stockage: 
  162.      */
  163.     DATABLOCK *    pDataBlock = (DATABLOCK *) MALLOC( sizeof(DATABLOCK) );
  164.  
  165.     /* 
  166.      * Initialisation: 
  167.      */
  168.     pDataBlock -> p_block = NULL;
  169.     pDataBlock -> ul_length = 0;
  170.  
  171.     return    pDataBlock;    
  172.  
  173. }
  174.                       
  175. /*
  176.  * free_DataBlock(-)
  177.  *
  178.  * Purpose:
  179.  * --------
  180.  * D‚truit un datablock 
  181.  * et libŠre la m‚moire qu'il occupait
  182.  *
  183.  * History:
  184.  * --------
  185.  * 15.07.94: fplanque: Created 
  186.  */
  187. void    free_DataBlock( 
  188.             DATABLOCK    *    pDataBlock )    /* In: Ptr sur Databloc … d‚truire */
  189. {
  190.     /* 
  191.      * D‚truit les donn‚es contenues ds datablock: 
  192.      */
  193.     if( pDataBlock -> p_block != NULL )
  194.     {
  195.         FREE( pDataBlock -> p_block );
  196.     }
  197.  
  198.     /*
  199.      * D‚truit le datablock lui-mˆme:
  200.      */
  201.     FREE( pDataBlock );    
  202.  
  203. }
  204.  
  205.  
  206.                       
  207. /*
  208.  * create_std_datapage(-)
  209.  *
  210.  * Purpose:
  211.  * --------
  212.  * Cr‚e une nlle datapage (Vide!) 
  213.  * avec zone d'info standard (vide)
  214.  * Cette page n'est PAS rattach‚e … un DataDir
  215.  *
  216.  * History:
  217.  * --------
  218.  * 1993: fplanque: Created
  219.  * 11.07.94: Initialisation du nouveau membre: DATATYPE
  220.  * 11.07.94: La datapage cr‚e est retourn‚e sous forme de ptr en r‚sultat de la fonction
  221.  * 15.12.94: init des pts se rapportant au DATADIR
  222.  */
  223. DATAPAGE *    create_std_datapage(             /* Out: Adresse de la nlle DATAPAGE */
  224.                     DATATYPE            DataType,   /* In:  Type de donn‚es que contiendra la datapage */
  225.                     const char     *    filename )    /* In:  Nom de la nlle DATAPAGE */
  226. {
  227.     /* 
  228.      * Cr‚e une zone de stockage: 
  229.      */
  230.     DATAPAGE *    pDataPage = (DATAPAGE *) MALLOC( sizeof(DATAPAGE) );
  231.     DATASTATE    DataState;
  232.  
  233.     /*
  234.      * Pas int‚gr‚e … un DATADIR pour l'instant:
  235.      */
  236.     pDataPage -> next            = NULL; 
  237.     pDataPage -> prev            = NULL; 
  238.     pDataPage -> pDataDir    = NULL; 
  239.  
  240.     /*
  241.      * Fixe type de donn‚es contenues dans la datapage:
  242.      */
  243.     pDataPage -> DataType = DataType;
  244.  
  245.     /* 
  246.      * Fixe nom (Copie le nom du fichier): 
  247.      */
  248.     strcpy( pDataPage -> nom, filename );
  249.  
  250.     /* 
  251.      * pas de donn‚es associ‚es: 
  252.      */
  253.     pDataPage -> data.x = NULL;
  254.  
  255.    /* 
  256.     * Fixe commentaire: 
  257.      * NULL: les appellants font cette assomption!
  258.     */
  259.     pDataPage -> comment = NULL;
  260.  
  261.    /* 
  262.      * Statut:
  263.      */
  264.     DataState .b_open = FALSE0;
  265.     DataState .sstate = SSTATE_EMPTY;
  266.     pDataPage -> DataState = DataState;
  267.  
  268.  
  269.     return    pDataPage;
  270. }
  271.  
  272.  
  273.  
  274. /*
  275.  * dataPage_IsOpen(-)
  276.  *
  277.  * Purpose:
  278.  * --------
  279.  * Dit si une fenˆtre est ouverte sur la DATAPAGE en question
  280.  *
  281.  * History:
  282.  * --------
  283.  * 06.08.94: fplanque: Created
  284.  */
  285. BOOL dataPage_IsOpen(                 /* Out: !=0 si fen ouverte */
  286.             DATAPAGE    *    pDataPage)    /* In: Datapage concern‚e */
  287. {
  288.     return    pDataPage -> DataState .b_open;
  289. }
  290.  
  291.  
  292.  
  293. /*
  294.  * dataPage_setOpenBit(-)
  295.  *
  296.  * Purpose:
  297.  * --------
  298.  * M‚morise le fait qu'il y ait une fenˆtre ouverte ou non
  299.  * sur cette DATAPAGE
  300.  *
  301.  * History:
  302.  * --------
  303.  * 06.08.94: fplanque: Created
  304.  */
  305. void dataPage_setOpenBit( 
  306.             DATAPAGE    *    pDataPage,    /* In: Datapage concern‚e */
  307.             BOOL             b_open )        /* In: !=0 si fen ouverte */
  308. {
  309.     pDataPage -> DataState .b_open = b_open;
  310. }
  311.  
  312.  
  313.  
  314. /*
  315.  * dataPage_getSavState(-)
  316.  *
  317.  * Purpose:
  318.  * --------
  319.  * Indique si la page ait ‚t‚ sauv‚e ou non
  320.  *
  321.  * History:
  322.  * --------
  323.  * 06.08.94: fplanque: Created
  324.  */
  325. SSTATE dataPage_getSavState(            /* Out: Satut sauvegarde */
  326.                 DATAPAGE    *    pDataPage )    /* In:  Datapage concern‚e */
  327. {
  328.     return    pDataPage -> DataState .sstate;
  329. }
  330.  
  331.  
  332.  
  333. /*
  334.  * dataPage_setSavState(-)
  335.  *
  336.  * Purpose:
  337.  * --------
  338.  * M‚morise le fait que la page ait ‚t‚ sauv‚e ou non
  339.  * Pas d'update graphique ni de recursion, pour ‡a, il faut appeller dataPage_setSavState()
  340.  *
  341.  * History:
  342.  * --------
  343.  * 06.08.94: fplanque: Created
  344.  * 11.08.94: simplified and moved complex stuff to dataPage_setSavState()
  345.  */
  346. void dataPage_setSavState(
  347.             DATAPAGE    *    pDataPage,        /* In: Datapage concern‚e */
  348.             SSTATE         sstate )            /* In: Etat */
  349. {
  350.     /*
  351.      * Modifie ‚tat de la page:
  352.      */
  353.     pDataPage -> DataState .sstate = sstate;
  354. }
  355.  
  356.  
  357.  
  358. /*
  359.  * dataPage_chgSavState(-)
  360.  *
  361.  * Purpose:
  362.  * --------
  363.  * Change l'‚tat de sauvegarde d'une page. 
  364.  * R‚percute les changement sur la hierachie de dossiers.
  365.  * Peut ‚galement donner lieu … un redraw des ic“nes concern‚es/
  366.  *
  367.  * History:
  368.  * --------
  369.  * 11.08.94: fplanque: Transfered from dataPage_setSavState()
  370.  * 15.12.94: utilise le pDataDir interne de la Datapage
  371.  */
  372. void dataPage_chgSavState(
  373.             DATAPAGE    *    pDataPage,        /* In: Datapage concern‚e */
  374.             SSTATE         sstate,            /* In: Etat */
  375.             BOOL            b_GrafUpdateP,    /* In: S'il faut faut r‚afficher les ic“nes correspondantes... */
  376.             BOOL            b_GrafUpdateD) /* In: S'il faut faut r‚afficher les ic“ne des DATADIRS contenant la DATAPAGE */
  377. {
  378.     /*
  379.      * datadir pour les updates d'icones 
  380.      */    
  381.     DATADIR    *    pDataDir = pDataPage -> pDataDir;
  382.     assert( pDataDir != NULL );
  383.  
  384.     if( dataPage_getSavState( pDataPage ) == sstate )
  385.     {    /*
  386.          * Il n'y a rien … changer!
  387.          */
  388.         return;            /* On ne fera bien sur pas d'Update graphique.. (Time is Money :) */
  389.     }
  390.     
  391.     /*
  392.      * Modifie ‚tat de la page:
  393.      */
  394.     dataPage_setSavState( pDataPage, sstate );
  395.  
  396.     /*
  397.      * Update graphique:
  398.      */
  399.     if( b_GrafUpdateP )
  400.     {
  401.         dataDir_UpdatePageIcon( pDataDir, pDataPage );
  402.     }
  403.  
  404.     /*
  405.      * Set State des datadirs...
  406.      */
  407.     if( sstate == SSTATE_MODIFIED && pDataDir != NULL)
  408.     {    /*
  409.          * Si on a modifi‚ une page:
  410.           * C'est tout le DATAGROUP qui a ‚t‚ modifi‚
  411.          * Pour commencer, Transmet la n‚cessit‚ de mise … jour au DATADIR:
  412.          * qui communiquera r‚cursivement … ses parents jusqu'au datagroup
  413.          */
  414.         dataDir_setSavState( pDataDir, sstate, b_GrafUpdateD );
  415.     }
  416. }
  417.  
  418.  
  419.  
  420.  
  421. /*
  422.  * query_newname(-)
  423.  *
  424.  * Purpose:
  425.  * --------
  426.  * Demande nom d'une nouvelle "page" 
  427.  * par un formulaire AES
  428.  * lorsqu'on la crée
  429.  *
  430.  * History:
  431.  * --------
  432.  * 1993: fplanque: Created
  433.  * 22.11.94: complŠtement refait avec form de renommage
  434.  * 14.01.95: gŠre commentaire
  435.  * 19.01.95: retorune NULL si pas de commentaire
  436.  */
  437. char * query_newname(                             /* Out: Nom entr‚ par l'utilisateur, NULL si annulé */
  438.             GRECT         *    pGRect_start,        /* In:  D‚but de l'effet graphique d'ouverture */
  439.             const char    *    cpsz_Title,         /* In:  Titre de la boite de demande */
  440.             const char    *    cpsz_OldName,        /* In:  Ancien nom */
  441.             const char    *    cpsz_OldComment,    /* In:  Ancien Commentaire */
  442.             char            **    ppsz_NewComment,    /* Out: Nouveau commentaire */
  443.             int                 take_ctrl )         /* In:  TAKE_CTRL s'il faut passer en modal */
  444. {
  445.     GRECT        GRect_Form;                /* Boite formulaire */
  446.     int        n_EditObj = NAME_NEW;
  447.     int        n_ExitObj;
  448.     char    *    psz_NewName;            /* Nom du new object: */
  449.  
  450.     /*
  451.      * Pour l'instant, on a pas de commentaire … renvoyer:
  452.      */
  453.     *ppsz_NewComment = NULL;    
  454.  
  455.     /* 
  456.      * Initialisations: 
  457.      */
  458.     dlink_teptext( &M_pForm_Rename[ RENTITLE ], cpsz_Title );
  459.  
  460.     if( cpsz_OldName == NULL )
  461.     {
  462.         cpsz_OldName = "";
  463.     }
  464.     M_pForm_Rename[ NAME_OLD ] .ob_spec.free_string = (char *) cpsz_OldName;
  465.  
  466.     if( cpsz_OldComment == NULL )
  467.     {
  468.         cpsz_OldComment = "";
  469.     }
  470.     M_pForm_Rename[ RNOLDCMT ] .ob_spec.free_string = (char *) cpsz_OldComment;
  471.  
  472.     fix_fmtFtext( M_pForm_Rename, NAME_NEW, cpsz_OldName );
  473.  
  474.     fix_ftext( M_pForm_Rename, RNNEWCMT, cpsz_OldComment );
  475.  
  476.     /* 
  477.      * Ouvre boŒte: 
  478.      */
  479.     if ( take_ctrl == TAKE_CTRL )
  480.     {    /*
  481.          * App prend en charge souris 
  482.          */
  483.         WIND_UPDATE_BEG_MCTRL
  484.     }
  485.         
  486.     open_dialog( M_pForm_Rename, pGRect_start, &GRect_Form );
  487.  
  488.     /*
  489.      * Gestion de la boŒte:
  490.      */
  491.     do
  492.     {
  493.         n_ExitObj = ext_form_do( M_pForm_Rename, &n_EditObj );    
  494.  
  495.         if( n_ExitObj == NAMEVAL )
  496.         {    /*
  497.              * On a valid‚:
  498.              * Extrait nom du fichier:
  499.              */
  500.             psz_NewName = extract_fmtFtext( M_pForm_Rename, NAME_NEW );
  501.             *ppsz_NewComment = extract_ftext( M_pForm_Rename, RNNEWCMT);    
  502.             
  503.             if( psz_NewName[0] == '\0' )
  504.             {    /*
  505.                  * On ne peut confirmer un nom vide! 
  506.                  */
  507.                 form_alert(1,"[1][|Vous n'avez pas|"
  508.                                         "indiqu‚ de nom!]"
  509.                                         "[Recommencer]");
  510.                 objc_dsel( M_pForm_Rename, NAMEVAL );    /* D‚s‚lectionne bouton */
  511.                 free_String( psz_NewName );
  512.                 free_String( *ppsz_NewComment );
  513.                 n_ExitObj = NIL;
  514.             }
  515.             else if( strcmp( psz_NewName, cpsz_OldName ) == 0 
  516.                     && strcmp( *ppsz_NewComment, cpsz_OldComment ) == 0 )
  517.             {    /*
  518.                  * Noms identiques:
  519.                  */
  520.                 form_alert(1,"[1][|Ancien et nouveau|"
  521.                                         "noms sont identiques!]"
  522.                                         "[Recommencer]");
  523.                 objc_dsel( M_pForm_Rename, NAMEVAL );    /* D‚s‚lectionne bouton */
  524.                 free_String( psz_NewName );
  525.                 free_String( *ppsz_NewComment );
  526.                 n_ExitObj = NIL;
  527.             }
  528.             
  529.         }
  530.     } while ( n_ExitObj != NAMEVAL && n_ExitObj != NAMEANN );
  531.  
  532.  
  533.     /* 
  534.      * Referme boite:
  535.      */
  536.     close_dialog( M_pForm_Rename, n_ExitObj, pGRect_start, &GRect_Form );
  537.  
  538.     if ( take_ctrl == TAKE_CTRL )
  539.     {
  540.         /* App prend en charge souris */
  541.         WIND_UPDATE_END_MCTRL
  542.     }
  543.     
  544.     if ( n_ExitObj == NAMEVAL )
  545.     {    /*
  546.          * On a valid‚:
  547.          */ 
  548.         if( strlen( *ppsz_NewComment ) == 0 )
  549.         {    /*
  550.              * Pas de commentaire:
  551.              */
  552.             FREE( *ppsz_NewComment );
  553.             *ppsz_NewComment = NULL;
  554.         }
  555.  
  556.         return    psz_NewName;        /* Retourne adr du nouveau nom */
  557.     }
  558.  
  559.     /*
  560.      * On a annul‚ 
  561.      */
  562.     free_String( *ppsz_NewComment );
  563.     *ppsz_NewComment = NULL;
  564.  
  565.     return    NULL;        
  566.  
  567. }
  568.  
  569.  
  570.  
  571. /*
  572.  * renommer_selection(-)
  573.  *
  574.  * Purpose:
  575.  * --------
  576.  * Renommer le fichier s‚lectionn‚ 
  577.  *
  578.  * History:
  579.  * --------
  580.  * 20.09.94: fplanque: cr‚‚ dialog
  581.  * 21.09.94: impl‚ment‚ actions
  582.  * 22.11.94: appelle Query_newname
  583.  * 14.01.95: gŠre commentaire
  584.  */
  585. void    renommer_selection(
  586.                 GRECT        *    pGRect_start )        /* In: d‚but effet graphique d'ouverture */
  587. {
  588.     char        *    psz_DataName;
  589.     char        *    psz_NewName;
  590.     char        *    psz_NewComment;
  591.     DATADIR    *    pDataDir;
  592.     DATAPAGE    *    pDataPage;
  593.  
  594.     /*
  595.      * V‚rifie que la s‚lection est ok:
  596.      */
  597.     if( G_selection_adr == NULL 
  598.         || ( G_selection_adr -> type != TYP_TREE && G_selection_adr -> type != TYP_DIR ) )
  599.     {
  600.         return;
  601.     }
  602.  
  603.     /*
  604.      * Cherche ptr sur page s‚lectionn‚e:
  605.      * d'aprŠs nom de l'ic“ne s‚lectionn‚e
  606.      */
  607.     pDataDir         = G_selection_adr -> datadir;
  608.     psz_DataName    = ((G_selection_adr -> draw_ptr.tree)[G_selection_adr -> selected_icon] .ob_spec.iconblk) -> ib_ptext;
  609.     pDataPage        = page_adr_byname( pDataDir, psz_DataName ); 
  610.  
  611.     if( pDataPage == NULL )
  612.     {
  613.         ping();
  614.         return;
  615.     }
  616.  
  617.  
  618.     /*
  619.      * Demande le nouveau nom:
  620.      */
  621.     psz_NewName = query_newname( pGRect_start, "RENOMMER UN OBJET", pDataPage -> nom, pDataPage -> comment, &psz_NewComment, TAKE_CTRL );
  622.  
  623.  
  624.     /*
  625.      * Changement du nom:
  626.      */
  627.     if( psz_NewName != NULL )
  628.     {
  629.         /*
  630.          * Change nom dans la page:
  631.          */
  632.         strcpy( pDataPage -> nom, psz_NewName );
  633.         FREE( psz_NewName );
  634.  
  635.         /*
  636.          * Change commentaire de la page:
  637.          */
  638.         free_String( pDataPage -> comment );
  639.         pDataPage -> comment = psz_NewComment;
  640.  
  641.         /*
  642.          * Mise … jour status sauvegarde: 
  643.          */
  644.         dataPage_chgSavState( pDataPage, SSTATE_MODIFIED, FALSE0, TRUE_1 );
  645.  
  646.         /*
  647.          * Le texte des ic“nes d'une fenˆtre … l'‚cran 
  648.          * pointe directement dans les DATAPAGES.
  649.          * Un simple REDRAW suffit donc … actualiser les ic“nes impliqu‚es
  650.          */
  651.         dataDir_UpdatePageIcon( pDataDir, pDataPage );
  652.         
  653.     }
  654. }
  655.  
  656.  
  657.  
  658.  
  659. /*
  660.  * create_newDataPage(-)
  661.  *
  662.  * Purpose:
  663.  * --------
  664.  * Cr‚er une nouvelle DATAPAGE dans le DATAGROUP sp‚cifi‚
  665.  * en demandant le nom … l'utilisateur
  666.  *
  667.  * History:
  668.  * --------
  669.  * 18.06.94: fplanque: Created based on creer_rubrique()
  670.  * 06.07.94: utilise maintenant dataGrp_CreatEmptyDataPg();
  671.  * 09.08.94: appel … update_datagroup_info() remplac‚ par dataPage_setSavState()
  672.  * 11.08.94: chgt des updates SSTATE
  673.  * 22.11.94: efface newname obtenu par query_newname()
  674.  * 14.01.95: gŠre commentaires
  675.  */
  676. DATAPAGE    *    create_newDataPage( 
  677.                     char            *    pS_title,        /* In: Titre de la demande */
  678.                     DATAGROUP    *    datagroup,        /* In: Datagroup ds lequel on veut cr‚er */
  679.                     GRECT             *    start_box )        /* In: d‚but effet graphique d'ouverture */
  680. {
  681.     /* 
  682.      * Demande nouveau nom: 
  683.      */
  684.     char * pMsz_NewComment;
  685.     char * newname = query_newname( start_box, pS_title, NULL, NULL, &pMsz_NewComment, TAKE_CTRL );
  686.  
  687.     if( newname == NULL )
  688.     {
  689.         return    NULL;
  690.     }
  691.     else
  692.     {    /* 
  693.          * Si on a donn‚ un nom valide: 
  694.          * Variables: 
  695.          */
  696.         DATADIR *    datadir = datagroup -> root_dir;
  697.  
  698.         /* 
  699.          * Cr‚e zone d'info DATAPAGE standard VIDE:INVALIDE
  700.          * … remplir dŠs le retour de la fonction
  701.          */
  702.         DATAPAGE *    datapage = dataDir_InsertStdDataPg( newname, datadir );
  703.         FREE( newname );
  704.  
  705.         datapage -> comment = pMsz_NewComment;
  706.  
  707.         /*
  708.          * Mise … jour des fenˆtres et des infos de la zone de donn‚es: 
  709.          */
  710.         dataPage_chgSavState( datapage, SSTATE_MODIFIED, FALSE0, TRUE_1 );
  711.         remplace_dir( datadir );
  712.  
  713.         return    datapage;
  714.     }
  715.     
  716. }
  717.  
  718.  
  719.  
  720. /*
  721.  * sauve_DataPage(-)
  722.  *
  723.  * Purpose:
  724.  * --------
  725.  * Front end … appeller pour
  726.  * sauver une DataPage dans un fichier ind‚pendant sur disque 
  727.  *
  728.  * Notes:
  729.  * ------
  730.  * La sauvegarde des pages arbo n'est pas encore impl‚ment‚e
  731.  *
  732.  * History:
  733.  * --------
  734.  * 29.07.94: fplanque: Created
  735.  */
  736. void    sauve_DataPage(
  737.             DATADIR    *    pDataDir,        /* In: Directory dans lequel se trouve la page */
  738.             DATAPAGE    *    pDataPage )        /* In: Page ‚cran … sauver */ 
  739. {
  740.     int    save_ok;                /* Sauvegarde OK ? */
  741.     FTA    fta;                    /* File Transfer Area */
  742.  
  743.     /*
  744.      *    Fixe FTA sur DATAPAGE … sauver: 
  745.      */
  746.     fta .pDataPage = pDataPage;
  747.  
  748.     /*
  749.      * Fixe le chemin de s‚lection du prochain fichier sur disque: 
  750.      */
  751.     set_DtPgFilePathToFS( pDataPage );
  752.  
  753.     /*
  754.      * Sauvegarde des donn‚es: 
  755.      */
  756.     switch( pDataPage -> DataType )
  757.     {
  758.         case    DTYP_ARBO:
  759.              /* 
  760.               * Sauver une page Arbo: 
  761.               */
  762.             save_ok = save_file( "Sauver une page Arbo *.ARB", FS_ARB, &fta );
  763.             break;
  764.  
  765.         case    DTYP_PAGES:
  766.             /*
  767.              * Sauver une page Ecran: 
  768.              */
  769.             save_ok = save_file( "Sauver une page Ecran *.VDT", F_VDT, &fta );
  770.             break;
  771.  
  772.         case    DTYP_DATAS:
  773.             /*
  774.              * Sauver une base de donn‚es: 
  775.              */
  776.             save_ok = save_file( "Sauver une base de donn‚es *.DXF", FS_DXF, &fta );
  777.             break;
  778.         
  779.         case    DTYP_TEXTS:
  780.             /*
  781.              * Sauver un Texte: 
  782.              */
  783.             save_ok = save_file( "Sauver un Texte *.TXT", F_TEXTE, &fta );
  784.             break;
  785.  
  786.         case    DTYP_PICS:
  787.             /*
  788.              * Sauver une Image: 
  789.              */
  790.             save_ok = save_file( "Sauver une Image *.PI3", F_IMAGE, &fta );
  791.             break;
  792.         
  793.         default:
  794.             signale("Sauvegarde impossible!");
  795.     }
  796.  
  797.     FAKE_USE( pDataDir );
  798.     FAKE_USE( save_ok );
  799.     
  800. }
  801.  
  802.  
  803.  
  804.  
  805.  
  806. /*
  807.  * dataPg_resetdata(-)
  808.  *
  809.  * Purpose:
  810.  * --------
  811.  * Initialise les donn‚es contenues dans une datapage
  812.  *
  813.  * Suggest:
  814.  * --------
  815.  * Mettre ‡a ds les m‚thodes s'appliquant … DATAPAGE
  816.  * traiter l'init d'un DTYP_DATAS
  817.  *
  818.  * History:
  819.  * --------
  820.  * 06.07.94: fplanque: Created based on efface_page()
  821.  * 06.07.94: aprŠs effacement, le reset laisse la page ds un etat r‚utilisable (si on y met de nouvelles donn‚es)
  822.  * 17.07.94: paramŠtre type r‚cup‚r‚ directement DANS la datapage
  823.  */
  824. void    dataPg_resetdata( 
  825.             DATAPAGE * datapage )  /* In: DATAPAGE a effacer */
  826. {
  827.     /*    printf( "Datapage: %lu  type:%d\n", datapage, datapage -> DataType ); */
  828.  
  829.     /* 
  830.      * Selon type de page: 
  831.      */
  832.     switch( datapage -> DataType ) 
  833.     {
  834.         case    DTYP_ARBO:
  835.         {    /*
  836.              * EFFACE Page arbo: 
  837.              */
  838.             PAGEARBO *pagearbo = datapage -> data.pagearbo;
  839.         
  840.             /*
  841.              * LibŠre chemin d'accŠs: 
  842.              */
  843.             FREE( pagearbo -> chemin );
  844.     
  845.             /*
  846.              * LibŠre pages-‚cran: 
  847.              */
  848.             Delete_TextParList( pagearbo -> pages_ecran );
  849.     
  850.             /*
  851.              * LibŠre les champ de sortie: 
  852.              */
  853.             Delete_SingleLinkList( pagearbo -> output_fields );
  854.             
  855.             /*
  856.              * LibŠre les params de liste: 
  857.              */
  858.             if( pagearbo -> pArboListPars != NULL )
  859.             {
  860.                 FREE( pagearbo -> pArboListPars );
  861.             }        
  862.         
  863.             /*
  864.              * LibŠre les champ de saisie: 
  865.              */
  866.             Delete_SingleLinkList( pagearbo -> input_fields );
  867.     
  868.             /*
  869.              * LibŠre liens-arbo: 
  870.              */
  871.             free_KeyWordList( pagearbo -> p_Events );
  872.     
  873.             /*
  874.              * LibŠre les paramŠtres sp‚ciaux: 
  875.              */
  876.             free_specialpar( pagearbo -> fnct_no, &(pagearbo -> special_par) );
  877.     
  878.             /*
  879.              * LibŠre paramŠtres de la page arbo: 
  880.              */
  881.             FREE( pagearbo );
  882.  
  883.             break;
  884.         }
  885.  
  886.         case    DTYP_PAGES:
  887.         {    /*
  888.              * Efface donn‚es page ‚cran:
  889.              */
  890.             free_DataBlock( datapage -> data.dataBlock );
  891.             break;
  892.         }
  893.         
  894.         /* case    DTYP_DATAS: */
  895.         /* … faire */
  896.  
  897.         case    DTYP_TEXTS:
  898.         {    /*
  899.              * Efface un texte (compact):
  900.              */
  901.             free_DataBlock( datapage -> data.dataBlock );
  902.             break;
  903.         }
  904.  
  905.         case    DTYP_PICS:
  906.             /*
  907.              * EFFACE une image: 
  908.              */
  909.             if ( datapage -> data.degaspix != NULL )    /* Si page a des donn‚es */
  910.             {
  911.                 FREE( datapage -> data.degaspix );        /* Efface donn‚es page */
  912.             }
  913.             break;
  914.             
  915.         default:
  916.             signale( "Ne peut effectuer reset-datapage()" );
  917.     }
  918.     
  919.     /* 
  920.      * Proc‚dures communes aux deux types: 
  921.      * Initialisation: 
  922.      */
  923.     datapage -> data.x = NULL;        /* Pas de donn‚es pour l'instant */
  924.  
  925.     /*
  926.      * Reset commentaire:
  927.     */
  928.     if ( datapage -> comment != NULL )    /* S'il y a un commentaire */
  929.         FREE( datapage -> comment );            /* Efface commentaire */
  930.     datapage -> comment = NULL;
  931.  
  932. }
  933.  
  934.  
  935. /*
  936.  * efface_page(-)
  937.  *
  938.  * Purpose:
  939.  * --------
  940.  * Efface une page arbo, ‚cran, image, texte...
  941.  *
  942.  * Suggest:
  943.  * --------
  944.  * Mettre ‡a ds les m‚thodes s'appliquant … DATAPAGE
  945.  *
  946.  * History:
  947.  * --------
  948.  * 1993: fplanque: Created
  949.  * 10.05.94: fplanque: Ajout‚ ttmt ParamŠtres Sp‚cifiques Page Arbo
  950.  * 06.07.94: extraction de dataPg_resetdata();
  951.  * 15.07.94: ne prend plus de paramŠtre 'type'
  952.  */
  953. void    efface_page( 
  954.             DATAPAGE *datapage ) /* In: DATAPAGE a effacer */
  955. {
  956.     /*
  957.      * Efface donn‚es contenues dans la page:
  958.      */
  959.     dataPg_resetdata( datapage );
  960.  
  961.     /*
  962.      * efface la page elle-mˆme
  963.      */
  964.     FREE( datapage );                           /* Efface infos/r‚f page */
  965.  
  966. }
  967.  
  968.  
  969.  
  970.    
  971.    
  972.  
  973. /*
  974.  * edit_datapage_comment(-)
  975.  *
  976.  * Purpose:
  977.  * --------
  978.  * Edition du commentaire associé à une 'page'
  979.  *
  980.  * Algorythm:
  981.  * ----------  
  982.  * Dialogue
  983.  *
  984.  * History:
  985.  * --------
  986.  * 1993: fplanque: Created
  987.  */
  988. int    edit_datapage_comment(         /* Out: TRUE si modifié, FALSE sinon */
  989.             DATAPAGE *    datapage,     /* In/Out: Page dont on veut éditer le commentaire */
  990.             GRECT        *    start_box )    /* In: Début effet graphique */
  991. {
  992.     /*
  993.      * Variables: 
  994.      */
  995.     GRECT                form_box;
  996.     int                edit = CMTETEXT;
  997.     int                exit_obj;
  998.  
  999.     /*
  1000.      * Fixe nom de la page: 
  1001.      */
  1002.     dlink_teptext ( &M_edit_comment[ CMTPAGE ], datapage -> nom );
  1003.     /*
  1004.      * Fixe texte d'‚dition: 
  1005.      */
  1006.     fix_ftext( M_edit_comment, CMTETEXT, datapage -> comment );
  1007.         
  1008.     /*vvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
  1009.     /* App prend en charge souris */
  1010.     WIND_UPDATE_BEG_MCTRL
  1011.     /***  Entr‚e dans un MODE:  ***/
  1012.  
  1013.         open_dialog( M_edit_comment, start_box, &form_box );
  1014.         
  1015.         exit_obj = ext_form_do( M_edit_comment, &edit);    /* Gestion de la boŒte */
  1016.         
  1017.         close_dialog( M_edit_comment, exit_obj, start_box, &form_box );
  1018.  
  1019.     /***  Sortie du MODE:  ***/
  1020.     /* AES peut reprendre la souris */
  1021.     WIND_UPDATE_END_MCTRL
  1022.     /*^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  1023.  
  1024.     /*
  1025.      * Sauvegarde des modifs: 
  1026.      */
  1027.     if ( exit_obj == CMTVALID )
  1028.     {    /*
  1029.          * Si on a valid‚: 
  1030.          */
  1031.         char    *new_comment = M_edit_comment[ CMTETEXT ] .ob_spec.tedinfo -> te_ptext;
  1032.  
  1033.         if ( datapage -> comment != NULL )
  1034.         {    /*
  1035.              * S'il existait d‚j… un commentaire: 
  1036.              */
  1037.             FREE ( datapage -> comment );        /* Efface ce commentaire */
  1038.         }
  1039.  
  1040.         /*
  1041.          * M‚morise nouveau commentaire: 
  1042.          */
  1043.         if ( new_comment[ 0 ] != '\0' )
  1044.         {    /*
  1045.              * Si le commentaire n'est pas vide: 
  1046.              */
  1047.             datapage -> comment = STRDUP( new_comment );
  1048.         }
  1049.         else
  1050.         {
  1051.             datapage -> comment = NULL;
  1052.         }
  1053.  
  1054.         return    TRUE_1;
  1055.     }
  1056.  
  1057.     return    FALSE0;
  1058. }
  1059.